ローカルのWindowsPCにCDK環境を作成してみた
CDKを使うときはCloud9を起動していたのですが料金も発生しますし、わざわざ起動するのも面倒になってきたのでローカルPCに環境を作成しました。
CDKを使う際の前提条件の準備
以下のドキュメントに記載されている通り「AWSの認証情報(アクセスキーなど)」と「Node.js 10.13」が必要になります。
Node.jsインストール
Node.jsは以下のところからインストーラをダウンロードします。
私がダウンロードしたときは「16.17.1」が推奨版になっていました。
インストーラをダウンロードしたらインストーラを実行してNode.jsをインストールします。
インストーラを実行すると以下の画面が出てくるのでライセンスの利用規約に同意やインストール先フォルダを選択しながら先に進んでいきます。
私はすべてデフォルトのままインストールしました。
インストールが完了したらPowerShellを起動して以下のコマンドを実行します。
インストールしたNode.jsのバージョンが表示されればインストール完了です。
node --version
アクセスキーとシークレットアクセスの設定
アクセスキーとシークレットアクセスの設定はAWS CLIを利用するので以下のブログを参考にインストールしてください。
アクセスキーとシークレットアクセスキーを設定していきます。
マネジメントコンソールからIAMダッシュボードに移動します。
移動したら左の項目から「ユーザーグループ」をクリックして「グループを作成」をクリックします。
画面が遷移したら「ユーザーグループ名」の入力と「許可ポリシー」の選択をします。
IAMユーザはこの後の手順で作成して追加するのでここでは選択しないでもよいです。
今回は以下の設定値にしました。
- ユーザーグループ名:CDK_Admin_Group
- 許可ポリシー:AdministratorAccess
AdministratorAccessは権限が非常に強いため取り扱いには注意してください。
IAMグループが作成できたら、IAMユーザを作成します。
IAMダッシュボードの左の項目から「ユーザー」をクリックして「ユーザーを追加」をクリックします。
以下の画面に遷移したら「ユーザー名」と「AWS認証情報タイプ」を選択します。
「ユーザー名」はわかりやすい名前にしました。
「AWS認証情報タイプ」はマネジメントコンソールへのアクセスは不要なので「アクセスキー - プログラムによるアクセス」だけにチェックを入れてます。
次の画面ではIAMユーザーが所属するIAMグループ(上記手順で作成したグループ)を選択します。
次の画面のタグの設定は何も設定しないで次の画面に進みます。
設定確認画面で問題が無ければ作成します。
ユーザーを作成するとアクセスキーとシークレットアクセスキーが記載されているCSVファイルをダウンロードできるのでダウンロードしておきます。
ダウンロードしたらPowerShellを実行して以下のコマンドを実行します。
aws configure
コマンドを実行すると以下の質問が聞かれるので入力していきます。
AWS Access Key ID [None]: アクセスキーを入力する AWS Secret Access Key [None]: シークレットアクセスキーを入力する Default region name [None]: デフォルトリージョンを入力する Default output format [None]: 出力フォーマットを入力する
CDKコマンドをインストール
上記の手順まで完了したら以下のコマンドでCDKコマンドをインストールします。
npm install -g aws-cdk
インストール確認として以下のコマンドでCDKのバージョンを確認します。
私がインストールしたときは2.44.0がインストールされました。
cdk --version
CDKを使ってみる
私はPythonでCDKを使うので以下のドキュメントの通り進めていきます。
以下のコマンドを実行してvirtualenvをインストールします。
python -m ensurepip --upgrade python -m pip install --upgrade pip python -m pip install --upgrade virtualenv
以下のコマンドでCDKプロジェクトを作成します。
最終行を実行するとaws-cdk-libがインストールされます。
mkdir test cd test cdk init app --language python python -m venv .venv .\source.bat .venv/bin/activate python -m pip install -r requirements.txt
ここまで実行すると環境作成は完了です。
実際にCDKでS3バケットを作ってみます。
testフォルダにあるtest_stack.pyを編集します。
デフォルトだと以下のSQSを作成するサンプルコードが書いてありました。
from aws_cdk import ( # Duration, Stack, # aws_sqs as sqs, ) from constructs import Construct class TestStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # The code that defines your stack goes here # example resource # queue = sqs.Queue( # self, "TestQueue", # visibility_timeout=Duration.seconds(300), # )
上記のコードを以下のように編集します。
from aws_cdk import ( Stack, aws_s3 as s3, RemovalPolicy ) from constructs import Construct Bucket_Name = "バケット名を入力する" class TestStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # The code that defines your stack goes here bucket = s3.Bucket(self, "S3", auto_delete_objects=True, block_public_access=s3.BlockPublicAccess.BLOCK_ALL, bucket_name=Bucket_Name, encryption=s3.BucketEncryption.S3_MANAGED, removal_policy=RemovalPolicy.DESTROY )
上記のコードはSSE-S3を使用した暗号化のバケットが作成されます。
また「auto_delete_objects=True」でスタック削除時にS3の中身を空にしてくれるLambdaがデプロイされます。
コードを書き換えたら以下のコマンドを実行します。
cdk bootstrapはCDKを初めて使用する環境の場合に実行するとコードを保存するS3、デプロイに必要なIAMポリシーが作成されます。
cdk deployでスタックをデプロイします。
cdk bootstrap aws://アカウントID/リージョンコード cdk deploy
成功するとBucket_Nameで設定した名前のS3バケットが1つ作成されます。
スタックの削除は以下のコマンドを実行します。
cdk destroy スタック名
さいごに
CloudFormationに慣れているとCDKでデプロイした際に作成したいリソース以外も作られていることがあるのでビックリすることがあります。
そのリソースだけを作りたいというときは接頭辞にCfnがついているL1コンストラクトを使うとCloudFormationのように作成することができます。